#!/bin/bash

# 自动化测试脚本 for multiplex_select
# 功能：自动创建命名管道、模拟多终端输入、执行测试程序

cleanup() {
    # 清理函数：删除临时管道文件
    rm -f in1 in2
    echo "Cleaned up FIFO files"
}

prepare_fifo() {
    # 创建命名管道（兼容不同系统）
    if ! mkfifo in1 2>/dev/null; then
        echo "Failed to create in1 FIFO"
        exit 1
    fi
    if ! mkfifo in2 2>/dev/null; then
        echo "Failed to create in2 FIFO"
        exit 1
    fi
    echo "Created FIFO pipes: in1 and in2"
}

background_writers() {
    # 后台写入进程组（模拟两个终端的输入）

    # 写入in1的数据（带延迟）
    (
        sleep 1  # 等待程序启动
        echo "SELECT CALL"
        sleep 2
        echo "TEST PROGRAMME"
        sleep 2
        echo "END"
        sleep 2
    ) > in1 &

    # 写入in2的数据（带延迟）
    (
        sleep 1
        echo "select call"
        sleep 2
        echo "test programme"
        sleep 2
        echo "end"
        sleep 2
    ) > in2 &

    echo "Background writers started"
}

run_program() {
    # 运行测试程序并发送退出指令
    echo "Starting multiplex_select..."

    # 启动程序并在7秒后发送退出命令
    (sleep 7; echo "q") | ./5_file_IO_x86
}

main() {
    # 主执行流程
    trap cleanup EXIT  # 注册退出清理

    prepare_fifo
    background_writers
    run_program
}

main